﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;

namespace Password_Manager.EncryptedFile
{
    public  class SimpleXmlHelper
    {
        private readonly string _xmlFilePath;


        // XML 文件路径
        private static readonly string XmlFilePath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
            "PasswordManager",
            "Files.xml"
        );

        // 确保 XML 文件存在
        private static void EnsureFileExists()
        {
            // 创建目录（如果不存在）
            var directory = Path.GetDirectoryName(XmlFilePath);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            // 创建空文件（如果不存在）
            if (!File.Exists(XmlFilePath))
            {
                File.Create(XmlFilePath).Dispose();
                SaveAllFiles(new List<FileItem>());
            }
        }

        // 保存所有文件到 XML
        public static void SaveAllFiles(List<FileItem> files)
        {
            EnsureFileExists();

            var serializer = new XmlSerializer(typeof(List<FileItem>));
            using (var writer = new StreamWriter(XmlFilePath))
            {
                serializer.Serialize(writer, files);
            }
        }

        // 从 XML 加载所有文件
        public static List<FileItem> LoadAllFiles()
        {
            EnsureFileExists();

            // 处理空文件的情况
            if (new FileInfo(XmlFilePath).Length == 0)
            {
                return new List<FileItem>();
            }

            var serializer = new XmlSerializer(typeof(List<FileItem>));
            using (var reader = new StreamReader(XmlFilePath))
            {
                return (List<FileItem>)serializer.Deserialize(reader);
            }
        }


        // 添加新文件
        public void AddFile(FileItem newFile)
        {
            var files = LoadAllFiles();
            files.Add(newFile);
            SaveAllFiles(files);
        }

        // 获取所有文件
        public static List<FileItem> GetAllFiles()
        {
            return LoadAllFiles();
        }

        // 根据识别码查找文件
        public  FileItem FindFileById(string identificationCode)
        {
            return LoadAllFiles().FirstOrDefault(f =>
                f.IdentificationCode == identificationCode);
        }

        // 根据加密文件查找识别码
        public  string FindIdentificationCodeByEncryptedFile(string encryptedFile)
        {
            var file = LoadAllFiles().FirstOrDefault(f =>
                f.Encryption == encryptedFile);
            return file?.IdentificationCode;
        }

        // 根据识别码删除文件
        public bool DeleteFile(string identificationCode)
        {
            var files = LoadAllFiles();
            var file = files.FirstOrDefault(f =>
                f.IdentificationCode == identificationCode);

            if (file != null)
            {
                files.Remove(file);
                SaveAllFiles(files);
                return true;
            }

            return false;
        }

        // 检查识别码是否存在
        public static bool IdentificationCodeExists(string identificationCode)
        {
            return LoadAllFiles().Any(f =>
                f.IdentificationCode == identificationCode);
        }
    }

}